import hmac
import hashlib
import time

def calculate_password(device_secret, content_to_sign):
    """计算MQTT连接所需的密码
    
    参数:
        device_secret (str): 设备密钥
        content_to_sign (str): 待签名内容
    
    返回:
        str: 计算得到的密码（HMAC-SHA256签名结果的十六进制表示）
    """
    # 使用HMAC-SHA256算法进行签名计算
    h = hmac.new(
        device_secret.encode('utf-8'),
        content_to_sign.encode('utf-8'),
        hashlib.sha256
    )
    # 返回签名结果的十六进制表示
    return h.hexdigest()

def generate_timestamp():
    """生成13位时间戳（毫秒级），设置为当前时间加1年"""
    # 获取当前时间戳（秒）
    current_time = time.time()
    # 计算1年后的时间戳（秒）
    one_year_later = current_time + 365 * 24 * 60 * 60
    # 转换为毫秒级时间戳并返回
    return int(one_year_later * 1000)

def build_content_to_sign(client_id, device_name, product_key, timestamp):
    """构建待签名内容
    
    参数:
        client_id (str): 客户端ID
        device_name (str): 设备名称
        product_key (str): 产品密钥
        timestamp (str): 时间戳
    
    返回:
        str: 待签名内容
    """
    return f"clientId{client_id}deviceName{device_name}productKey{product_key}timestamp{timestamp}"

def main():
    # 配置信息
    product_key = "iwgqDwr0Ag2"
    device_name = "fastapi"
    device_secret = "de3f627f9798b5fcca837d22839c9c68"
    
    # 生成1年后的时间戳
    timestamp = generate_timestamp()
    
    # 构建clientId，包含安全模式、签名方法和时间戳
    client_id = f"{product_key}.{device_name}|securemode=2,signmethod=hmacsha256,timestamp={timestamp}|"
    
    # 构建username
    username = f"{device_name}&{product_key}"
    
    # 构建待签名内容
    content_to_sign = build_content_to_sign(client_id, device_name, product_key, timestamp)
    
    # 计算password
    password = calculate_password(device_secret, content_to_sign)
    
    # 打印MQTT连接参数
    print("MQTT连接参数:")
    print(f"clientId: {client_id}")
    print(f"username: {username}")
    print(f"password: {password}")
    print(f"timestamp: {timestamp}")
    print(f"过期时间: {time.ctime(timestamp/1000)}")  # 转换回秒并显示可读时间

if __name__ == "__main__":
    main()    